#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
数据源综合测试工具
用于全面测试和验证数据源系统的各项功能
包括数据源管理器、工厂函数、采集器集成等

适合开发调试和系统验证使用
日常问题诊断请使用 quick_test.py
"""

import sys
import os
import time

# 添加src目录到Python路径
sys.path.insert(0, os.path.join(os.path.dirname(__file__), 'src'))

from src.utils import load_config, setup_logging
from src.data_collector import KeywordCollector
from src.data_sources import DataSourceManager, create_data_source


def test_individual_sources():
    """测试各个数据源"""
    print("🔍 开始测试各个数据源...")
    
    # 加载配置
    config = load_config()
    logger = setup_logging(config)
    
    # 创建数据源管理器
    source_manager = DataSourceManager(config)
    
    # 测试关键词
    test_keyword = "Python编程"
    
    print(f"\n📝 测试关键词: {test_keyword}")
    print("=" * 50)
    
    # 获取所有启用的数据源
    enabled_sources = source_manager.get_enabled_sources()
    print(f"📊 发现 {len(enabled_sources)} 个启用的数据源")
    
    # 逐个测试每个数据源
    for i, source in enumerate(enabled_sources, 1):
        print(f"\n{i}️⃣ 测试 {source.name}...")
        try:
            keywords = source.collect_keywords(test_keyword)
            print(f"✅ {source.name}: 获取到 {len(keywords)} 个关键词")
            if keywords:
                print(f"   示例: {keywords[:5]}")
            else:
                print(f"   ⚠️  未获取到关键词")
        except Exception as e:
            print(f"❌ {source.name} 失败: {e}")
        
        # 添加延迟，避免请求过于频繁
        if i < len(enabled_sources):
            time.sleep(2)
    
    print("\n" + "=" * 50)
    print("🎯 测试完成！")


def test_with_different_keywords():
    """使用不同关键词测试"""
    print("\n🔄 使用不同关键词测试...")
    
    config = load_config()
    logger = setup_logging(config)
    source_manager = DataSourceManager(config)
    
    test_keywords = ["数据分析", "机器学习", "SEO优化"]
    
    for keyword in test_keywords:
        print(f"\n📝 测试关键词: {keyword}")
        print("-" * 30)
        
        # 测试所有启用的数据源
        enabled_sources = source_manager.get_enabled_sources()
        total_keywords = 0
        
        for source in enabled_sources:
            try:
                keywords = source.collect_keywords(keyword)
                print(f"  {source.name}: {len(keywords)} 个")
                total_keywords += len(keywords)
            except Exception as e:
                print(f"  {source.name}: 失败 - {e}")
        
        print(f"  总计: {total_keywords} 个关键词")
        time.sleep(1)


def test_source_manager():
    """测试数据源管理器功能"""
    print("\n🔧 测试数据源管理器功能...")
    
    config = load_config()
    logger = setup_logging(config)
    source_manager = DataSourceManager(config)
    
    # 显示所有数据源信息
    print("\n📋 所有数据源信息:")
    source_info = source_manager.get_source_info()
    for source in source_info:
        status = "✅ 启用" if source['enabled'] else "❌ 禁用"
        print(f"  - {source['name']} ({source['type']}) - {status}")
    
    # 测试启用/禁用功能
    print(f"\n📊 启用的数据源数量: {len(source_manager.get_enabled_sources())}")
    print(f"📊 总数据源数量: {len(source_manager.sources)}")


def test_factory_function():
    """测试工厂函数"""
    print("\n🏭 测试数据源工厂函数...")
    
    config = load_config()
    
    # 测试创建已知数据源
    known_sources = ['baidu_suggestions', 'baidu_related', 'search360', 'zhihu_topics']
    
    for source_type in known_sources:
        source = create_data_source(source_type, config)
        if source:
            print(f"✅ 成功创建: {source.name} ({source_type})")
        else:
            print(f"❌ 创建失败: {source_type}")
    
    # 测试创建未知数据源
    unknown_source = create_data_source('unknown_source', config)
    if unknown_source is None:
        print("✅ 正确处理未知数据源类型")


def test_collector_integration():
    """测试采集器集成"""
    print("\n🔗 测试采集器集成...")
    
    config = load_config()
    logger = setup_logging(config)
    
    # 创建采集器
    collector = KeywordCollector(config)
    
    # 显示数据源信息
    source_info = collector.get_source_info()
    print(f"📊 采集器管理的数据源数量: {len(source_info)}")
    
    # 测试关键词扩展
    test_keyword = "Python编程"
    print(f"\n🧪 测试关键词扩展: {test_keyword}")
    
    try:
        # 只测试一个关键词，避免耗时过长
        keywords = collector.expand_keywords([test_keyword])
        print(f"✅ 扩展完成，共获得 {len(keywords)} 个关键词")
        
        # 显示前几个关键词
        if keywords:
            sample_keywords = list(keywords)[:10]
            print(f"   示例: {sample_keywords}")
        
    except Exception as e:
        print(f"❌ 关键词扩展失败: {e}")


def run_comprehensive_test():
    """运行综合测试"""
    print("🚀 数据源综合测试工具")
    print("用于全面验证数据源系统功能")
    print("=" * 60)
    print()
    
    try:
        # 1. 测试数据源管理器
        test_source_manager()
        
        # 2. 测试工厂函数
        test_factory_function()
        
        # 3. 测试采集器集成
        test_collector_integration()
        
        # 4. 测试各个数据源
        test_individual_sources()
        
        # 5. 使用不同关键词测试
        test_with_different_keywords()
        
        print("\n" + "=" * 60)
        print("🎉 所有测试完成！")
        print("\n💡 如果某些数据源仍然获取不到关键词，可能的原因：")
        print("   1. 网络连接问题")
        print("   2. 反爬虫机制")
        print("   3. API接口变更")
        print("   4. 需要登录或验证")
        print("   5. 地区限制")
        print("   6. 数据源配置问题")
        
        print("\n🔧 调试建议:")
        print("   1. 检查网络连接")
        print("   2. 查看日志文件")
        print("   3. 调整延迟时间")
        print("   4. 检查User-Agent设置")
        print("   5. 考虑使用代理")
        
    except Exception as e:
        print(f"\n❌ 测试过程中出现错误: {e}")
        import traceback
        traceback.print_exc()


if __name__ == "__main__":
    run_comprehensive_test()
